<?php

namespace Fn;

class MathExp {

    public static function __callStatic($func, $arguments) {
        $tmp = str_replace('_', '', $func);
        if (method_exists(__CLASS__, $tmp)) {
            return call_user_func_array(array(__CLASS__, $tmp), $arguments);
        }
        return fasle;
    }

    /**
     * in & not in
     * $var = 1;
     * $list = 1,2,3,4,5
     * @param string $var
     * @param string $value xx,yy,...
     * @param bool $i
     * @return bool
     */
    public static function in($var, $value, $i = true) {
        $r = array_map('trim', explode(',', $value));
        $r = trim(implode(",", $r), ',');
        return self::contain(",,$value,", ",$var,", $i);
    }

    public static function notIn($var, $value, $i = true) {
        return !self::in($var, $value, $i);
    }

    //==================================

    /**
     * 不等于
     * @param type $var
     * @param type $value
     * @param type $i  默认区分大小写
     * @return type
     */
    public static function eq($var, $value, $i = false) {
        $var = ($i ? strtolower($var) : $var ) . '';
        $value = ($i ? strtolower($value) : $value ) . '';
        return $var === $value;
    }

    /**
     * 不等于
     * @param type $var
     * @param type $value
     * @param type $i  默认区分大小写
     * @return type
     */
    public static function neq($var, $value, $i = false) {
        return !self::eq($var, $value, $i);
    }

    /* static function neq($var,$value,$i=false){
      $var   = ($i? strtolower($var) :$var ).'';
      $value = ($i? strtolower($value) :$value ).'';
      return $var!=$value;
      } */

    /**
     * 包含，从变量$var中查找变量$value 
     * @param type $var
     * @param type $value
     * @param type $i
     * @return type
     */
    public static function contain($var, $value, $i = true) {
        $fn = $i ? 'stripos' : 'strpos';
        return $fn($var, $value) === false ? false : true;
    }

    public static function not_contain($var, $value, $i = true) {
        $fn = $i ? 'stripos' : 'strpos';
        return $fn($var, $value) === false ? true : false;
    }

    /**
     * 左包含
     * @param type $var  计算的变量
     * @param type $value  计算的值
     * @param type $i 为true不区分大小写
     * @return type
     */
    public static function left($var, $value, $i = true) {
        return self::contain("%[:::]%" . trim($var), "%[:::]%" . trim($value), $i);
    }

    /**
     * 右包含
     * @param type $var  计算的变量
     * @param type $value  计算的值
     * @param type $i 为true不区分大小写
     * @return type
     */
    static function right($var, $value, $i = true) {
        return self::contain(trim($var) . '%[:::]%', trim($value) . '%[:::]%', $i);
    }

    /**
     * 大于  
     * @param type $var   计算的变量
     * @param type $v   计算的值
     * @return type
     */
    public static function gt($var, $v) {
        return ($var > $v);
    }

    /**
     * 小于
     * @param type $var 计算的变量
     * @param type $v  计算的值
     * @return type
     */
    public static function lt($var, $v) {
        return ($var < $v);
    }

    public static function elt($var, $v) {
        return ($var <= $v);
    }
    
     public static function egt($var, $v) {
        return ($var >= $v);
    }

}